home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dbase / techs.zip / TECH3.ZIP / PORTSWAP.ASM next >
Assembly Source File  |  1985-11-01  |  2KB  |  62 lines

  1. ; Program ..: Portswap.ASM
  2. ; Author ...: Robert Boies
  3. ; Date .....: August 1, 1985
  4. ; Note .....: Swaps the LPT1 and LPT2 ports in PC/MS-DOS 2.x
  5.  
  6. ;***********************************************************
  7. CODESEG SEGMENT BYTE PUBLIC 'CODE'
  8.     ASSUME    CS:CODESEG,DS:CODESEG
  9.         ORG     0FA00H   ; Originate at 64000 decimal above
  10.                         ; the top of dBASE II.     
  11.  
  12. ;----------------------------------------------------------
  13. PORTSWAP PROC    NEAR
  14.  
  15. START:
  16.        PUSH    DS       ; Save environment.
  17.        PUSH    AX
  18.        PUSH    BX
  19.        PUSH    DI
  20.        MOV     AX,40H   ; System stores critical operating
  21.                         ; parameters at segment 40H (absolute
  22.                         ; address 400H).
  23.                         ; Load this segment address into AX.
  24.        PUSH    AX       ; Put it on the stack.
  25.        POP     DS       ; Pop the segment id from the
  26.                         ; stack into extra segment register.
  27.        MOV     DI,8H    ; Port address of LPT1 and LPT2 are
  28.                         ; stored at offsets 8H and 0AH in
  29.                         ; this segment.  Load DI with offset.
  30.        MOV     AX,[DI]
  31.                         ; Put the port address of the
  32.                         ; first printer into the accumulator.
  33.        INC    DI        ; Increment the destination index twice
  34.        INC    DI        ; to point to port address of the
  35.                         ; second printer.
  36.        MOV    BX,[DI]
  37.                         ; Put the port address of the second
  38.                         ; printer into BX.
  39.        MOV    [DI],AX
  40.                         ; Poke the address of the first printer
  41.                         ; into the location of the second
  42.                         ; printer.
  43.        DEC    DI        ; Decrement DX twice to point to the
  44.        DEC    DI        ; port address of the second printer.
  45.        MOV    [DI],BX
  46.                         ; Poke the address of the second
  47.                         ; printer
  48.                         ; into the location of the first.
  49.  
  50.        POP    DI        ; Restore environment.
  51.        POP    BX
  52.        POP    AX
  53.        POP    DS
  54.  
  55.        RET              ; Return to dBASE II.
  56.  
  57. PORTSWAP ENDP
  58. ;-------------------------------------------------------
  59. CODESEG    ENDS
  60. ;*******************************************************
  61.     END    START
  62.